import os #导入OS模块，方便使用该模块中的语句或者函数
Folder_Size = 0 #建立变量=文件夹大小
def F_S(F_N): #建立一个函数：输入参数-文件夹名称可以得出文件夹大小
    global Folder_Size #global语句的作用：在编写程序的时候，如果想为一个在函数外的变量重新赋值，并且这个变量会作用于许多函数中时，就需要告诉
                       #python这个变量的作用域是全局变量。 此时用global语句就可以变成这个任务，也就是说没有用global语句的情况下，是不能修
                       #改全局变量的
                       #一个用作我们赋值一个变量的时候，会随着特定的条件去进行自动变更值的特殊语句
    Folder_List = os.listdir(F_N) #得出指定文件夹路径下所有的文件名称，以列表形式呈现
    print(Folder_List) #输出当前文件夹中所有的文件名称（此名称中可能会有不是文件的文件名称，下面的isfile判断是否为文件不停循环直至文件夹中最后
                       #一个文件的名称）
    for Folder in Folder_List: #文件在文件夹内循环
        Folder_Join = os.path.join(F_N, Folder) #os.path.join()函数：连接两个或更多的路径名组件 1.如果各组件名首字母不包含’/’，则函
                                                #数会自动加上 2.如果有一个组件是一个绝对路径，则在它之前的所有组件均会被舍弃 3.如果最后
                                                #一个组件为空，则生成的路径以一个’/’分隔符结尾
                                                #将文件夹名称与文件进行连接，产生连接后文件的名称，以此去体现文件处于文件夹中
        print(F_N) #输出当前文件夹的名称
        if os.path.isfile(Folder_Join): #os.path.isfile()：判断某一对象(需提供绝对路径)是否为文件
                                        #os.path.isdir()：判断某一对象(需提供绝对路径)是否为目录
                                        #如果isfile函数结果为真，也就是输入的参数是文件时：
            Size = os.path.getsize(Folder_Join) #文件大小就等于我们getsize函数计算出来的值
            print(Size) #输出文件夹中所有的文件的大小
            Folder_Size += Size #文件夹的大小的等于所有文件的大小相加
            print(Folder_Join)  #输出所有连接后文件的名称
        else: #否则，如果isfile函数结果为假，也就是输入的参数不是文件时：
            F_S(Folder_Join) #输出连接后文件名称对应的大小，也就是说如果不是文件而是文件夹时，就返回第一步去循环计算，直至计算到是文件为止

print('文件夹包含文件如下：')
F_S('C:/Users/21785/AppData/Local/Python/Python39')
print('文件夹大小：', Folder_Size, '字节')
